一句话总结:不要用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.

第三,性能。

-- 阅读剩余部分 --

最近遇到一个问题,在一个transaction里,会遇到保存不成功,但transaction不回滚的问题。

我还以为是Yii的问题,后来才发现是自己对try catch的理解不到位。

transaction是要进行try catch的,如果try block里数据库保存失败,例如$user->save()或者$order->save()不成功,返回值false,但也仅此而已了,不抛出异常,因此transactiontry block中捕获不到Exception,自然就不回滚。

-- 阅读剩余部分 --

注:原本想发表在知乎,但我发现还是不去献丑了。我觉得还是发在V站比较好。

大家好,我是艾瑞克,我目前在美国圣地亚哥,主业是给国内的朋友代购金坷垃,副业是顺便帮人写写网站。

我今天分享一下在美国做项(外)目(包)的一点体会。
我是转行的,从生物转行而来,top2毕业,现在龟缩在美国加州一个偏远小城,给人写网站为生。

我学了2年半PHP,最近半年也写了不少nodejs。
怎么说呢,美国PHP生态环境和国内完全不一样,其实这属于整个经济环境的不同。

简单对比一下......

-- 阅读剩余部分 --

Model类或者ActiveRecord类,里面会有一个rules,规定了所有的attribute的限制条件。
然后呢,万一生成的时候,把id也写到rules里,而且是['id', required]
好了,就傻逼了,保存不了,而且不报错。

而且,更要命的是,transaction还不回滚!!!

可以说,用gii生成的代码问题多多,都遇到两回因为gii的原......

-- 阅读剩余部分 --