MySql táblanév kis/nagybetű

 ( bodnarj | 2018. május 2., szerda - 12:31 )

Sziasztok!

Adott egy MySql Linuxra telepítve nagybetűs táblanevekkel. Mysqldump-al mentés lett róla készítve és az be lett töltve egy Windows alatt futó MySql szerverre.
Ott természetesen kisbetűsre konvertálódtak a tábla nevek és windows alatt a mysqldump által generált scriptben is kisbetűsek. Emiatt egyrészt nem lehet visszatölteni Linux alá a meglévő sémába, csak üres sémába töltődik vissza, de mivel így kisbetűs lett minden, ezért az alkalmazásban az sql utasítások dobnak egy hátast mert ott mindenhol nagybetűvel vannak a hivatkozások a tábla nevekre.

Mit lehet ez esetben tenni? Az nem opció hogy az alkalmazásban az összes sql scriptet javítsuk kisbetűsre. Az lenne a legjobb ha mind linux mind windows alatt minden nagybetűs lenne. Valahogy át lehet alakítani a windows alatti táblaneveket nagybetűssé?

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

https://dev.mysql.com/doc/refman/8.0/en/identifier-case-sensitivity.html

A lower_case_table_names beállítást érdemes megnézni.

De amúgy hosszú távon egyértelműen azzal jársz legjobban, ha minden táblanév csupa kisbetűs lesz.

Linux alatt ugye ha visszatöltöm a mentés és kisbetűkre változnak a tábla nevek bármilyen értéket állíthatok én a lower_case_table_names változónak továbbra is elszállnak az alkalmazásban az sql utasítások.

Le van írva a manual megfelelő oldalán a megoldás.....el kéne olvasni.
https://dev.mysql.com/doc/refman/8.0/en/identifier-case-sensitivity.html

"Use lower_case_table_names=0 on Unix and lower_case_table_names=2 on Windows. This preserves the lettercase of database and table names. The disadvantage of this is that you must ensure that your statements always refer to your database and table names with the correct lettercase on Windows. If you transfer your statements to Unix, where lettercase is significant, they do not work if the lettercase is incorrect."

mysqladmin -u root -p variables parancs kiadása után látom, hogy hiába állítottam be a /etc/my.cnf állományban a lower_case_table_names ártéket bármire mindig 0.

És ez is le van írva a hivatkozott oldalon, hogy miért van:
"lower_case_table_names can only be configured when initializing the server. Changing the lower_case_table_names setting after the server is initialized is prohibited."

Így már világos, viszont még mindig nem tudom hogyan oldjam meg a problémámat.
Van egy Linuxon futó mysql amire debugolás céljából be kellene tölteni egy adatbázis mentést, ami egy windowsos mysql szerverről készült. És itt jött elő a probléma, hogy nálunk linux van és nem megy be a sémába a mentés mert a tábla ALMA a mysqldump által generált scriptben meg alma.
Szóval hogy tudom megoldani, hogy a mentés miben kisbetűsek a táblanevek betöltődjön az én nagybetűs sémámba és működjön is ha utólag nem állíthatom a lower_case_table_names változót?

Úgy például, hogy telepítesz Docker containerbe egy teljesen friss, eldobós MySQL instance-ot, amit jól konfigurálsz fel. Debugolásra ez még a legjobb, hiszen bármikor megismételhető eredményt ad.