- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我们可以在初始化PDO时显式设置字符集为utf8,只需要在dsn字符串中加上“charset=utf8
”即可。但是如何在使用 PDO 时显式指定 MySQL 连接中使用的排序规则呢?
我不想使用额外的查询来执行此操作:
SET NAMES utf8 COLLATE utf8_unicode_ci;
有什么办法不用求助于“SET NAMES”吗?或者,如果我不指定排序规则会有什么问题吗?
最佳答案
这是一个二合一的答案。
您可以在 DSN 中将其设置为 MYSQL_ATTR_INIT_COMMAND(连接选项)。
我认为 DSN 更好。
$connect = new PDO(
"mysql:host=$host;dbname=$db;charset=utf8",
$user,
$pass,
array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
)
);
如果您指定 UTF-8
,您将使用 utf8_general_ci
的默认排序规则,除非您的数据库表或字段使用不同的东西。
如果您希望整个服务器使用此默认排序规则进行响应,请使用配置指令:
collation_server=utf8_unicode_ci
character_set_server=utf8
因此您不必每次都在连接时指定它。
排序规则影响字符的排序,并在数据库中的表和字段上设置。查询表时会遵守这些设置。确保它们已设置好。使用 UTF-8 名称和数据库中的排序规则集。
您的评论:
"People should know char set and collation are 2 different things."
让我们引用 MySQL Manual证明这一点:
A
SET NAMES 'charset_name'
statement is equivalent to these three statements:SET character_set_client = charset_name;
SET character_set_results = charset_name;
SET character_set_connection = charset_name;Setting
character_set_connection
to charset_name also implicitly setscollation_connection
to the default collation for charset_name.
我的回答:它隐含地工作,除非你的表明确地改变它。
来自评论的问题:
How to make sure I don't mess things up as my tables are not the default collation utf8_general_ci?
示例:列排序规则覆盖表排序规则
CREATE TABLE t1
(
col1 CHAR(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci
) CHARACTER SET latin1 COLLATE latin1_bin;
如果在列上指定了 CHARACTER SET X 和 COLLATE Y,则使用字符集 X 和排序规则 Y。该列具有表列中指定的字符集 utf8
和排序规则 utf8_unicode_ci
,而表在 latin1 + latin1_bin 中。
示例:一般使用表排序规则
如果未在列/字段上明确指定排序规则,则使用表排序规则:
CREATE TABLE t1
(
col1 CHAR(10)
) CHARACTER SET latin1 COLLATE latin1_bin;
col1 具有排序规则 latin1_bin。
如果您需要 utf8_unicode_ci
排序规则,请将其设置为常规表或列/字段。
关于php - 如何在没有 SET NAMES 的情况下使用 PDO 指定排序规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25807202/
我需要在 nginx-ingress 版本上允许来自多个来源的请求:http://localhost:4200、http://localhost:4242 等1.7.1.但我无法对多个来源执行此操作,
我正在部署我使用 APIGILITY 开发的 API到 IIS。由于 IIS 不支持 .htaccess,我试图从 .htaccess 文件的内容创建 web.config 文件。我使用 IISv7.
我正在尝试更改上面 css 样式中的“宽度”规则。在“inspect element”中你可以看到宽度是1008px。我不希望它是 1008px 但它不会让我在 css 样式中更改它你可以看到它被“删
外部css赋值有2种方法,我用的是第一种;大多数网站使用第二种方法。我想知道我是否做错了! 第一种方法: 为几乎每个 css 规则创建一个类并在任何地方使用它们。 blah blah .f_
RDF使用 WEB 标识符 (URIs) 来标识资源,使用属性和属性值来描述资源 RDF 资源、属性和属性值 RDF使用 WEB 标识符来标识事物,并通过属性和属性值来描述资源。 关于资源、属性
我想挖掘特定的 rhs 规则。文档中有一个示例证明这是可能的,但仅适用于特定情况(如下所示)。先来一个数据集来说明我的问题: input {b=100002} 0.2500000 0.250000
我想让 nginx 从网站根目录(:http://localhost:8080/)提供一个静态文件,但它为我的代理通行证提供服务;它提供“/”规则而不是“=/”。 这是我的 nginx 配置的样子:
根据gnu make documentation , 如果一个规则通过一次调用生成多个目标(例如,一个配方执行一个带有多个输出文件的工具),你可以使用 '&:' 规则语法来告诉 make。但是,当在多
我已阅读Firebase Documentation并且不明白什么是 .contains()。 以下是文档中 Firebase 数据库的示例规则: { "rules": { "rooms"
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 6 年前。 Improv
我正在尝试做一些多态性练习,但我无法弄清楚这种多态性是如何工作的。我没有找到任何关于这种练习的深入信息。希望大家能给我一些解释。 练习1: class Top { public void m(
为了调试复杂的 XSLT 转换,我将其分为几个部分:首先构建 %.1.xml,然后使用它构建 %.2.xml ,最后构建 %.3.xml。一切正常,但如果我要求 Make 构建最后一个,Make 总是
我尝试了 hacerrank 的 slove 练习 Click我不知道如何添加这些规则: ► 它可以包含 4 个一组的数字,并用一个连字符“-”分隔。 ► 不得有 4 个或更多连续重复数字。 这是我的
我正在尝试编写一个小测验,我希望“再试一次”按钮遵循与“else”之前的“if”语句相同的规则 using System; public class Program { public stat
在我的 Spring/Boot Java 项目中,我有一组服务方法,例如以下一个: @Override public Decision create(String name, String descr
我正在阅读 Covariant virtual function .上面写着 假设 B::f 覆盖了虚函数 A::f。如果满足以下所有条件,A::f 和 B::f 的返回类型可能不同: 1) The
我工作的公司想要分发(在公共(public)链接中)具有内部签名的应用程序。我很确定 Apple 否认这种事情,但我在官方文档/契约(Contract)中没有找到任何相关信息。 有谁知道它到底是如何工
我是 CSS 新手。我观察到一个奇怪的 CSS 行为,其中一个元素具有以下 CSS 属性 .container .header{ color: #FFFFFF; font-size: 2em;
这个问题在这里已经有了答案: Is there a CSS selector for elements containing certain text? (21 个答案) 关闭 7 年前。
我有以下 CSS: workoutcal.css: .errorlist{ color:red; } 以下基本模板: base.html: {% load static %} {
我是一名优秀的程序员,十分优秀!