Maintain case sensitivity when importing db into windows - mysql

I have an export from a MYSQL database on a linux machine however when importing that database into MYSQL on windows all of the table names that were camel cased are now all lower case. The sql dump has the correct case in it but the importing via phpmyadmin seams to remove these.
How can I import it and keep the case?

There is a setting for mysql to allow case differentiation in windows. You need to edit the my.cnf file and alter the setting:
lower_case_table_names=2
Then restart mysql.
Otherwise, this may be a case of phpmyadmin changing case in the way it passes queries to the server rather than a linux-to-windows problem. Have you tried importing the sql dump using another mysql manager such as SQLyog? (Tools -> Restore from SQL Dump...)

It is probably worth reading the following page from the MySQL Reference Manual: http://dev.mysql.com/doc/refman/5.5/en/identifier-case-sensitivity.html
Based on that, I think you need to set to 0, not 2, which will ensure that the schema is stored using the same case as defined in your DDL.
lower_case_table_names=0

Go to C:\ProgramData\MySQL\MySQL Server x.x.x,
Locate my.ini file add lower_case_table_names=2 at the bottom and restart Server.
Use lower_case_table_names=0 on Unix and lower_case_table_names=2 on Windows.

Related

MySQL lower_case_file_system change (OFF to ON)

I am trying to change the lower_case_file_system to 'ON' in MySQL, but do not know how to do it. I'd like to set it up as case-non-sensitive.
According to the MySQL 8.0 Reference Manual, 'This variable describes the case sensitivity of file names on the file system where the data directory is located. OFF means file names are case-sensitive, ON means they are not case-sensitive. This variable is read-only because it reflects a file system attribute and setting it would have no effect on the file system.'
How can I change the value? Any idea, please? Thanks!
Carolina
enter image description here
Assuming it's through XAMPP.
Do these steps:
open your MySQL configuration file: [drive]\xampp\mysql\bin\my.ini
look up for: # The MySQL server [mysqld]
add this right below it: lower_case_table_names = 2
save the file and restart MySQL service
From: http://webdev.issimplified.com/2010/03/02/mysql-on-windows-force-table-names-to-lowercase/
In order to use camelCaseNames in table names and views, lower_case_table_names has to be 0
Might want to check here too:
As per this link, lower_case_table_names should be set together with --initialize option.
If on Ubuntu:
https://bugs.mysql.com/bug.php?id=90695 this is not supported out of the box. So the workaround is this
lower_case_table_names=1 on Ubuntu 18.04 doesn't let mysql to start
Finally, read the official sources:
https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html
https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html
https://forums.mysql.com/read.php?10,377683
On Mysql Server 8.0 Windows os, if you change lower_case_table_names=2 in mysql.ini the server will not start so you have to follow this
step 1: Backup all data / export to .sql or Dump all data
step 2: Stop the server from service
step 3: Delete the data folder from C:\Program Files\ Mysql Server 8.0\Data
step 4: Open C:\Program Files\ Mysql Server 8.0\my.ini as an administrator using notepad
step: 5 find set lower_case_table_names= 2 if you want camelCase table name
step: 6 open mysql installer and open reconfigure then open ->show advanced and logging option -> Advanced Options -> use second option from the list
step: 7 then everything will be ok

Import MySQL 5.6 Database in ProgramData dir to MySQL 5.7

When I was installing MySQL 5.6 if, there was a option to choose your MySQL database dir (I guess). I chose that option and set it to D:\ProgramData\MySQL\MySQL Server 5.6. I was hoping that there would be the same on MySQL 5.7 installation but there is not.
So, how to import the MySQL 5.6 database to 5.7?
There are several ways. Best one is to always have a full dump of the database in case you need to regenerate from zero.
Other way is to allow mysql installer to do the upgrade. If the installer fails to take the previous datadir, you can manually specify it modifying the my.ini config file.
Search for an entry, which should look like this:
# Path to the database root
datadir=D:/ProgramData/MySQL/MySQL Server 5.6/Data
Hope this helps.

Changing MySQL 5.0's tmp folder within my.ini in Windows

I have a MySQL server (version 5.0.67) running on Windows 7. While I was working with hibernate within Eclipse, I got the following error:
Caused by: java.sql.SQLException: Can't create/write to file 'C:\Windows\TEMP#sql_e9c_0.MYI' (Errcode: 17)
I tried to configure the TmpPath of MySQL and set Systemparameters to TMPDIR:
TEMP=C:\Users\JDD09~1.HER\AppData\Local\Temp
TMP=C:\Users\JDD09~1.HER\AppData\Local\Temp
TMPDIR=C:\tmp\tmpdir
Within my.ini, I made the following change:
[mysqld]
tmpdir=C:\tmp\tmpdir
However, now MySQL aborts when it tries to start up.
I've read this thread (Changing the tmp folder of mysql), but it didn't help. How can I fix this?
You may need to make sure you are using forward slashes '/' instead of backward slashes '\'. This worked for me, so you would use this line:
tmpdir=C:/tmp/tmpdir
Try this:
[mysqld]
tmpdir="C:\tmp\tmpdir"
and make sure that path C:\tmp\tmpdir must exist in the system.
According to the manual for Mysql 5.0 as regard 'TMPDIR': 5.0/en/windows-installation.html. The default is to use the windows temporary directory.
If you decide to define it. Then it must be a valid directory. It will not create it.
My recommendation, for a 'development' system on a local pc is not bother changing it.
If you are not sure then delete the entry from 'my.ini'. This will use the default settings which should be ok to get you started.
ps. i use 'mysql' on windows.
According to the documentation:
On Windows, MySQL checks in order the values of the TMPDIR, TEMP, and TMP environment variables. For the first one found to be set, MySQL uses it and does not check those remaining. If none of TMPDIR, TEMP, or TMP are set, MySQL uses the Windows system default, which is usually C:\windows\temp.
If the file system containing your temporary file directory is too small, you can use the mysqld --tmpdir option to specify a directory in a file system where you have enough space.
The --tmpdir option can be set to a list of several paths that are used in round-robin fashion. Paths should be separated by colon characters (:) on Unix and semicolon characters (;) on Windows.
Edit the file C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
Add the following line, under [mysqld]
[mysqld]
tmpdir=C:/tmp/tmpdir
Restart MySQL service under Windows services.
Change can be verified by the following commands in windows prompt
mysql -uroot -p -e "SHOW VARIABLES LIKE 'tmpdir'"

How to force case sensitive table names?

I'm working on a MySQL database in windows.
I must move it into a Linux environment. MySQL database contains a lot of tables and stored procedures which are CASE SENSITIVE.
When I backup my database, all table names are forced lowercase so when I restore it in Linux it complains because you can't make duplicate tables and stored procedures.
I don't have access to the MySQL configuration in the linux environment so I cant change MySQL settings to case insensitive mode.
Is there any way to force MySQL (v5.x) to use case sensitive table names in windows?
Read the following chapter in the official MySQL documentation: Identifier Case Sensitivity.
Then add the following system variable to the server section, [mysqld], inside the my.ini configuration file and restart the MySQL service:
lower_case_table_names=2
Have a look at this article - http://dev.mysql.com/doc/refman/5.1/en/identifier-case-sensitivity.html
Mode 2 allows to store tables with specified lettercase, but anyway, name comparisons won't be case sensitive and you won't be able to store table1 and Table1 at the same time.
On Windows put lower_case_table_names=2 at the end of the
C:\ProgramData\MySQL\MySQL Server 5.7\my.ini file.
Unfortunately there's no way of making MySQL on windows to behave 100% as in Linux. What you can do, is to run a minimal VM on Virtual Box or VMware player with TurnKey - MySQL Appliance.
In my personal experience, I've found quite useful to have a VM with a configuration similar to the deployment environment to diagnose problems.
Add this property to lower_case_table_names=2 to my.ini
By default, table names are case sensitive in Windows, but you can make it case sensitive by updating the lower_case_table_names variable to 2.
ref: https://dev.mysql.com/doc/refman/8.0/en/identifier-case-sensitivity.html
However, before going to the further process, create backups of your existing databases. Then you need to remove all existing databases to avoid table name inconsistency.
We were on the step to set lower_case_table_names to 2, but this variable is read-only, so you can not update it using the script. So need to change it to the configure file (my.ini). For windows, it's available in the C:\ProgramData\MySQL\MySQL Server X.X directory. Open this file in administrator mode and set the lower_case_table_names variable value to 2.
These changes will not take effect until you restart the MySQL server before restarting the MySQL Server by following steps.
Open the Run window by using the Windows+R keyboard
Type services.msc and press Enter
Select the MySQL service and click the restart button
ref: https://www.mysqltutorial.org/mysql-adminsitration/restart-mysql/
MySQL server might not start because of changes in the my.ini file. In that case, we can not proceed further. Therefore lower_case_table_names variable value set back 1 again. then restart the MySQL server mentioned above.
Finally, we only have one remaining option to make a case-sensitive table name for MySQL in windows, completely removing MySQL from your machine and configuring it during installation. During install, check Advanced and Logging Options from the Type and Networking tab, then select the radio button to preserve the given case from the Advanced Options tab.
ref: Can't set lower_case_table_names in MySQL 8.x on Windows 10
i add this line and it solve the different case problem
lower_case_table_names=1
in /etc/my.cnf
you can see how to set mysql variable "lower_case_table_names" form this page :
https://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_lower_case_table_names
In MySQL 8, lower_case_table_names setting is not allowed once installation is done. To enable the setting , you have to re-install mysql

How to enable inno-db support on MySql 5 installed above MySql 4?

How to enable inno-db support on installed instance of MySql?
I have installed mysql-5.0.67-win32.
'InnoDB' is 'DISABLED' when executing 'show engines'.
According to documentation MySql is compiled with support of inno-db
(From doc: A value of DISABLED occurs either because the server was started with an option that disables the engine, or because not all options required to enable it were given.)
In my.ini I commented line with 'skip-innodb'. This didn't help.
All other inno-db related variables remain unchanged.
I have performed some unusual action before I experienced described situation.
I have mysql-4.0.17-win installed. I uninstall it and after this installed mysql-5.0.67-win32.
In installation wizard I chose MyISAM support only (as far as I understand I disabled inno-db support in such way. When I tried to reinstall with support of inno-db I had problems of using my previous database 'mysql' with account information).
MySQL documentation says that I should use mysqldump to export data and after this to import exported data in process of upgrade. I tried to do so, but when importing data I obtained message about syntax error (I think that it is connected with some incompatibilities of 4-th and 5-th version of mysql)
Should be enabled by default. There are some situations where wrong permissions on the MySQL lib folder cause InnoDB to bark. Check your MySQL error log for permission errors.
I do have the following innodb options in my.ini. It is a very minimal configuration, so dont' use this values if you would like mysql to have a good performance. Please restart mysql after a change of my.ini.
#*** INNODB Specific options ***
innodb_data_home_dir="C:/mysqldata/"
#skip-innodb
innodb_additional_mem_pool_size=120M
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=16M
innodb_buffer_pool_size=10M
innodb_log_file_size=2M
innodb_thread_concurrency=8
Maybe you have inno-db disabled in the global configuration file. On Linux this would be something like /etc/mysql/my.cnf - maybe Windows has a similar global conf-file.
Make sure you are changing the correct my.ini file. On Windows this is read from many locations. The order is:
WINDIR\my.ini, WINDIR\my.cnf
C:\my.ini, C:\my.cnf
INSTALLDIR\my.ini, INSTALLDIR\my.cnf
defaults-extra-file
Type mysql --help in the command prompt to see the actual order on your computer e.g.:
Default options are read from the
following files in the given order:
C:\my.ini C:\my.cnf C:\WINDOWS\my.ini
C:\WINDOWS\my.cnf C:\Program
Files\MySQL\M ySQL Server 5.0\my.ini
C:\Program Files\MySQL\MySQL Server
5.0\my.cnf
have you checked the startup parameters? maybe the shell script or batch file that you use to start up the server disable the engine on the command line.. IIRC command line flags trumps the .ini settings.
I have resolved the problem.
In short:
I was not able to dump databases on MySql4 and restore it on MySql5 due to some strange syntactic errors when importing data.
I tried after installation to override MySql5 databases with old ones, including database 'mysql'. It works ok but I was not able to enable inno-db support. (In such way I even was able to use function PASSWORD for old passwords (instead of OLD_PASSWORD))
Since database structure of 'mysql' is changed in 5 version I tried to install MySql5 again and copied my old databases except 'mysql' one. After this I updated 'mysql' database with corrected version of exported data from 'mysql'. In such a way I obtained mysql 5 working.
After all I also executed mysqlcheck --all-databases --auto-repair
to upgrade my tables.
P.S. Thank to authors of all answers which hint me to the correct way of resolving problem.