分类 Database 下的文章

MySQL 5.7.4之前的版本:

ALTER IGNORE TABLE mytbl ADD UNIQUE (columnName);

For MySQL 5.7.4 or later:

ALTER TABLE mytbl ADD UNIQUE (columnName);

这个IGNORE主要目的是,因为表中可能已经存在了数据,而且会有重复数据。
但MySQL 5.7.4 之后再用IGNORE关键字,会报错。所以增加UNIQUE限制之前,要先确保数据没有重复。

还有一个小特色,甚至你可以为这个constraint加个名字:

ALTER TABLE myTable
  ADD CONSTRAINT constraintName 
    UNIQUE (columnName);

try catch的一点小体会这个日记里,写到了,如果数据库保存失败 ,save()仅仅返回一个false,因此要手动抛出异常。

但我现在遇到一个情况,就是在save()的时候,会报错,因为某个字段里有特殊字符,又没有做转义处理,就会报错。

而且如果是一个for loop里报错,这会导致for loop退出的,因此要catch这个错误,但不要throw,一旦throw,这个for loop还是中断了。仅仅catch这个错误,然后在console里写一个提示,即可。

好,问题来了:什么时候save()会报错呢?什么时候不会报错,但仅仅返回一个false

创建一个db:

CREATE DATABASE myDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

查看一个table里有多少行:

SELECT COUNT(*) FROM myTable;

通常,使用mysqldump导出一般用这样的方式:

mysqldump -u root -p --no-data [db-name] > [filename.sql]

但如果在Windows环境下,不管是CMD还是PowerShell,使用这个命令都会有问题,因为这样导出的sql文件,在Linux环境下会报错:

ERROR: ASCII '\0' appeared in the statement, but this is not allowed unless option --binary-mode is enabled and mysql is run in non-interactive mode. Set --binary-mode to 1 if ASCII '\0' is expected.

这里显然是由于Windows环境下的编码方式和Linux不同导致。

- 阅读剩余部分 -

一句话总结:不要用utf8mb4_general_ci了,而要用utf8mb4_unicode_ci

原文链接:https://stackoverflow.com/questions/766809/whats-the-difference-between-utf8-general-ci-and-utf8-unicode-ci

首先,用uft8mb4而不要用utf8,这是肯定的,因为uft8mb4可以存储emoji

其次,精确性来说,utf8mb4_unicode_ci使用Unicode来进行比对和排序,在很多语言中更精确(毕竟 是Unicode)。

utf8mb4_general_ci fails to implement all of the Unicode sorting rules, which will result in undesirable sorting in some situations, such as when using particular languages or characters.

第三,性能。

- 阅读剩余部分 -