如何在 Windows 中的(现有)mySQL 个名称中使用大写

How to use UPPER case in (existing) mySQL names in Windows

有谁知道我如何在我的 table 名字中保留大小写 (Win 10 使用 phpMyAdmin,最新 xampp 发行版)。这可能是因为 xampp 使用的是 MariaDB 而不是 mySQL?

Table 名称被重写为全部小写。

在 phpMyAdmin 网站上阅读,要使用保留大小写,我应该添加:

'set-variable=lower_case_table_names=0'

这已停止 mySQL 并出现一条错误消息:

[ERROR] c:\xampp\mysql\bin\mysqld.exe: unknown variable 'set-variable=lower_case_table_names=0'

然后在阅读了此处的答案后我了解到我应该使用 lower_case_table_names=0 所以将其添加到 my.ini 并且仍然得到相同的错误。

然后我花了 20 分钟试图找出 set-variable=lower_case_table_names=0 的设置位置。 (认为​​它必须被缓存或复制或其他东西。)

无奈之下,我删除了lower_case_table_names=0,错误消失了。我把它放回去并得到了 [ERROR] c:\xampp\mysql\bin\mysqld.exe: unknown variable 'set-variable=lower_case_table_names=0' 错误。 IE 它们似乎是错误报告翻译的别名。有点气人。

您应该更仔细地阅读文档,特别是 identifier case sensitivity section

In MySQL, databases correspond to directories within the data directory. Each table within a database corresponds to at least one file within the database directory (and possibly more, depending on the storage engine). Triggers also correspond to files. Consequently, the case sensitivity of the underlying operating system plays a part in the case sensitivity of database, table, and trigger names. This means such names are not case sensitive in Windows, but are case sensitive in most varieties of Unix.

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. You should not set this variable to 0 if you are running MySQL on a system that has case-insensitive file names (such as Windows or OS X). 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.

总结一下:在 windows 上,您不应将 lower_case_table_names 设置为 0。如果要在 windows 上保留 table 名称的字母大小写,则设置lower_case_table_names 到 2.

using system variables 部分解释了如何以各种方式设置系统变量。

将 lower_case_table_names=2 放入您的 my.ini 文件中允许在表格名称中使用大写和小写...但是...大但是...它不允许您将大写字母放入现有文件名中。

解决方案是将您的 table 复制到名称为 "correct" 的新 table。

然而,由于这只会改变 table 名称的外观(table 存储在小写文件中),您必须使用中间 table.

EG 您希望 table 名称为 HelloWorld,但您发现它存储为 helloworld。将上面的行添加到您的 my.ini 文件,然后将 helloworld 复制到新的 table,例如 "helloTemp",删除 helloworld 复制 helloTemp 到 HelloWorld 删除 helloTemp 并且您有一个 table以 HelloWorld 为名称。