使用InnoDB; 不要使用MyISAM.
(好吧,好吧,除非你必须这样做,通常是由于InnoDB中没有提供全文匹配.即便如此,你最好还是将InnoDB中的规范数据和全文索引放在一个单独的MyISAM searchbait表上,你可以然后进行干预.)
如果需要严格的字符串匹配,请使用BINARY列,否则默认情况下会进行不区分大小写的比较.为字符集正确设置排序规则(最好:UTF-8)或不区分大小写的比较会表现得很奇怪.
如果希望代码可移植,请使用ANSI SQL模式.ANSI_QUOTES允许您使用标准的双引号"identifier"(表,列等)名称来避免保留字; MySQL的默认方式是反引用,但它们是非标准的,在其他地方不起作用.如果你不能控制这样的设置,省略任何标识符引用并尽量避免保留字(这很烦人,因为在不同的数据库中有很多).
使用您的数据访问层的MySQL字符串文字转义或查询参数化功能; 不要试图自己创建转义文字,因为它们的规则比你想象的复杂得多,如果你弄错了,你就有了一个SQL注入漏洞.
当您选择对GROUP BY列没有功能依赖性的列时,不要依赖MySQL返回特定行的行为.这是其他数据库中的错误,可以轻松隐藏仅在数据库中的内部存储发生更改时弹出的错误,从而导致返回不同的行.
SELECT productid, MIN(cost)
FROM products
GROUP BY productcategory -- this doesn't do what you think
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1130 次 |
| 最近记录: |