我已经在 SO、MySQL 文档和其他地方研究这个问题几个小时了,但仍然找不到令人满意的解决方案。问题是:
让 MySQL 像 SQLite 一样处理字符串而不需要任何额外的“智能”转换的最简单方法是什么?
例如,以下代码在 SQLite 中完美运行:
CREATE TABLE `dummy` (`key` VARCHAR(255) NOT NULL UNIQUE);
INSERT INTO `dummy` (`key`) VALUES ('one');
INSERT INTO `dummy` (`key`) VALUES ('one ');
INSERT INTO `dummy` (`key`) VALUES ('One');
INSERT INTO `dummy` (`key`) VALUES ('öne');
SELECT * FROM `dummy`;
但是,在 MySQL 中,具有以下设置:
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_bin
以及以下内容CREATE DATABASE
陈述:
CREATE DATABASE `dummydb` DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_bin;
第二次仍然失败INSERT
.
我宁愿让字符串列声明尽可能简单,SQLite 的TEXT
是理想的。好像VARBINARY
是要走的路,但我还是想听听你的意见any其他,潜在的better options.
Addendum: The SHOW CREATE TABLE dummy
输出是
mysql> SHOW CREATE TABLE dummy;
+-------+-----------------------------------------------------
| Table | Create Table
+-------+-----------------------------------------------------
| dummy | CREATE TABLE `dummy` (
`key` varchar(255) COLLATE utf8mb4_bin NOT NULL,
UNIQUE KEY `key` (`key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin |
+-------+-----------------------------------------------------
1 row in set (0.00 sec)