我一直在研究這個問題幾個小時,在SO,MySQL文檔和其他地方,但仍然找不到滿意的解決方案。問題是:如何使MySQL像SQLite那樣處理字符串,關於Unicode和整理?
什麼是使SQL像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
是去的方式,但我還是想聽聽其他任何你的意見,可能更好選項。
附錄:該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)
這些都是默認值。你是否在你的'CREATE TABLE'語句中覆蓋它們? –
阿爾瓦羅,你的意思是哪個部分?所有的SQL都如前所述。 –
版本是5.7.17。 –