SQL unique varchar case sensitivity question

送分小仙女□ 提交于 2019-11-26 10:57:01

问题


I\'m trying to populate a SQL table with a list of words. The table itself it pretty simple:

CREATE TABLE WORDS(
  ID BIGINT AUTO_INCREMENT, 
  WORD VARCHAR(128) NOT NULL UNIQUE, 
  PRIMARY KEY(ID)
);

The problem I\'m running into is this: when I do the following inserts back to back

INSERT INTO WORDS(WORD) VALUES(\'Seth\');
INSERT INTO WORDS(WORD) VALUES(\'seth\');

The second insert fails with a constraint violation (\"Duplicate entry \'seth\' for key \'WORD\'\").

How can I get the UNIQUE constraint on WORD to be case sensitive?


回答1:


Looks like mysql is case insensitive by default:

You probably need to create the column with a case sensitive collation (e.g. utf8_bin):

CREATE TABLE WORDS (
    ID BIGINT AUTO_INCREMENT, 
    WORD VARCHAR(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL UNIQUE, 
    PRIMARY KEY(ID)
);



回答2:


By default MySQL ignores differences in case and trailing spaces on varchar.

If you need it to be case sensitive, you can alter the table to be varchar(...) binary.

Use show create table to better understand how MySQL converts this to full notation.

If you need to pay attention to trailing spaces as well as be case sensitive, use varbinary instead of varchar.




回答3:


I made my UNIQUE key varchar(1000). It worked.

After some trial and error, I found anything greater than or equal to 1100 varchar would fail.

To clarify I did not try between 1001 to 1099.

Hope this helps.



来源:https://stackoverflow.com/questions/6448825/sql-unique-varchar-case-sensitivity-question

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!