MySQL na lokále a na serveru aneb jak na malá písmena v názvech tabulek

5. 2. 2010 - Karel Havlíček – Junior Application Developer

Každý, kdo vyvíjí na Windows, se setká s jiným chováním MySQL na Linuxu a na Windows.


Bolavým místem je právě citlivost na malá a velká písmena v názvech objektů - tabulek, procedur, indexů...

V čem je problém?

V tom, že aplikace s jiným case nastavením na produkčním serveru neběží. Forrest navíc používá jmennou konvenci tabulek s velkými písmeny v názvu tabulek. Nějaký parazit je však na lokále zakládá s malými písmeny, i když je definujete s velkými písmeny. V tu chvíli je problém na světě. Vaše SQL dumpy jsou pak se serverem nekompatibilní.

Kdo za to může?

Co když to dělá Navicat ? Zkoušel jsem jinou admin konsoli, chyba zůstala. Chyba – čili, že vlastnost se ukázala přímo v instalaci MySQL. Jeho výchozí nastavení po instalaci je na Linuxu jiné než na Windows!

Jak z toho ven?

Řešení naštěstí existuje. Testoval jsem různé rady s různým výsledkem. Níže je popsáno již ověřené řešení. Linux má jako výchozí natavení lower_case_table_names = 0, to znamená, že vše se porovnává vždy case sensitive. Kdežto Windows mají lower_case_table_names = 1, což způsobí konverzi všeho na malá písmena. Striktní nastavení lower_case_table_names = 0 na Windows však může působit problémy při dotazech. Zlatá střední cesta je nastavit tuto proměnnou na magickou hodnotu 2. Ta zajistí zachování původních tvarů jmen, je pak možné použít v názvech i camel konvenci. Jmenné porovnávání uvnitř databáze zůstává case insensitive.

Podrobný popis chování lower_case_table_names
Value Meaning
0 Table and database names are stored on disk using the lettercase specified in the CREATE TABLE or CREATE DATABASE statement. Name comparisons are case sensitive. Note that if you force this variable to 0 with --lower-case-table-names=0 on a case-insensitive file system and access MyISAM tablenames using different lettercases, index corruption may result.
1 Table names are stored in lowercase on disk and name comparisons are not case sensitive. MySQL converts all table names to lowercase on storage and lookup. This behavior also applies to database names and table aliases.
2 Table and database names are stored on disk using the lettercase specified in the CREATE TABLE or CREATE DATABASE statement, but MySQL converts them to lowercase on lookup. Name comparisons are not case sensitive. This works only on file systems that are not case sensitive! InnoDB table names are stored in lowercase, as for lower_case_table_names=1.

Kde to nastavím?

Zde záleží, jak MySQL spouštíte. Zda jako prosté exe nebo jako Windows service. Vždy jde o to, zatáhnout do hry soubor my.ini (pro úplnost, lze toto nastavení definovat i na jiném místě). My.ini je pak použit jako argument při spouštění, viz kroky níže. Pozn. pokud používáte balík XAMPP, kde je i MySQL, nemusíte 8 kroků níže vůbec absolvovat. Stačí vám jen úprava my.ini a restart servisu.

Postup nastavení při použití MySQL jako Windows servis

  1. Zastav MySQL servis
  2. Otevři aplikaci editor registrů (Start -> Run -> regedit)
  3. Hledej HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\
  4. Najdi MySQL klíč. Název může nést i číslo verze databáze.
  5. Vpravo byste měli vidět klíč s názvem ImagePath. Double-click na tento klíč.
  6. Bude tam něco jako:

Code:

"C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqld-nt" MySQL

Potřebuje jej změnit na:

Code:

"C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqld-nt" --defaults-file="C:\Program Files\MySQL\MySQL Server 5.0\bin\my.ini" MySQL

Musíte samozřejmě doplnit své přesné cesty dle vaší instalace. Vaši cestu k my.ini souboru. Obvykle je v bin adresáři.

  1. Potvrďte kliknutím OK a zavřete regedit.
  2. Pro Ty, kdo používají XAMPP začíná návod zde. Změňte my.ini dle návodu níže. Já jej mám třeba v C:\XAMPP\mysql\bin. Jde tedy o bin adresář. Proměnná musí být nastavena v sekci [mysqld].

Nastavení my.ini

	# The MySQL server
	[mysqld]
	basedir = "C:/XAMPP/mysql/"
	datadir = "C:/XAMPP/mysql/data/"
	# Add by Kha
	set-variable=lower_case_table_names=2
	port = 3306
	socket = "MySQL"
	skip-locking
	key_buffer = 16M
	max_allowed_packet = 1M
	table_cache = 64
	sort_buffer_size = 512K
	net_buffer_length = 8K
	read_buffer_size = 256K
	read_rnd_buffer_size = 512K
	myisam_sort_buffer_size = 8M
  1. Nastartujte MySQL servis

Někdy je nutné tabulky vytvořit znovu, aby se chovaly tak, jak potřebujete dle nastavení. Na nové tabulky toto opatření zabere OK. A to je vše. Enjoy!

odkazy

http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html
http://www.phpbuilder.com/board/showthread.php?t=10341


Potřebujete...

... profesionální webovou prezentaci?

Realizujeme firemní weby, rozsáhlé portály i stručné microsites.

  • Analýzy a testování
  • Špičkový design
  • Tvorba struktury, textů nebo videa
  • Systém pro správu obsahu

Více informací

... efektivně komunikovat uvnitř firmy?

Komplexně zajistíme efektivní intranetové řešení.

  • Návrh business procesů
  • Systém pro správu obsahu
  • Personalizovaný přístup
  • Integrace s dalšími systémy

Více informací

... úspěšnou on-line kampaň?

Proměníme návštěvníky internetu v zákazníky.

  • Microsites a hry
  • E-mail a mobilní marketing
  • Videa pro internet
  • Multimediální CD a DVD

Více informací

FG Tipy

Internet už používá 53 % české populace.

Získejte mezi nimi nové zákazníky - nabídka je široká!

Zkušenost s nákupem on-line má více než čtvrtina Čechů starších 15 let.

Prodávejte na internetu - přes weby a portály!

3 ze 4 uživatelů se díky vyhledávačům seznamují s novými značkami. Většina značku považuje za kvalitní a významnou, pokud ji vyhledávač uvede na přední pozici.

Vyzkoušejte on-line marketing!

Reklamní hry, které mají tématickou návaznost na značku, výrazně pomáhají utvářet pozitivní vztah se zákazníky.

Získejte si náklonnost internetových uživatelů originální on-line kampaní!

Způsob čtení z webu je specifický. Internetový čtenář je nedočkavý a text vstřebává nesouvisle.

Nepodceňujte to - objednejte si profesionální weby a portály!

Mobilní telefon používá 89 % obyvatel ČR ve věku nad 15 let.

Vyzkoušejte mobilní marketing!

Názor na web si uživatel utvoří během první vteřiny návštěvy. Do 30 vteřin odejde, pokud není spokojen. Ve 4 případech z 10 se už nevrátí.

Objednejte si profesionální webová řešení!

Polovina aktivních uživatelů před nákupem běžně hledá informace o produktu na internetu.

Udržujte svůj web aktuální - pomocí Edee CMS!

Internet patří mezi nejvýznamnější zdroje informací o produktech a značkách. Dle mnoha výzkumů jej uživatelé v tomto směru řadí už na 2. místo.

Internet vám získá nové zákazníky - objednejte si profesionální web!

Správná vnitrofiremní komunikace nejen podporuje týmovost a výkonnost zaměstnanců. Výrazně ovlivňuje úspěch celé společnosti.

Komunikujte se zaměstnanci rychle, efektivně a zábavně - pomocí intranetu!


Odběr FG článků

odebírat přes RSS

Novinky

Tiskové zprávy o nás a našich projektech.

Čtěte

2