【问题标题】:UTF8 Postgresql Create Database Like MySQL (including character set, encoding, and lc_type)UTF8 Postgresql Create Database Like MySQL(包括字符集、编码和lc_type)
【发布时间】:2012-04-15 05:59:22
【问题描述】:

对于下面的 MySQL create database 语句,在 postgresql 中的等价物是什么?:

CREATE DATABASE IF NOT EXISTS `scratch` 
  DEFAULT CHARACTER SET = utf8
  DEFAULT COLLATE = utf8_unicode_ci;

我目前有:

CREATE DATABASE "scratch"
  WITH OWNER "postgres"
  ENCODING 'UTF8'
  TABLESPACE "pg_default";

这就够了,还是我应该更具体一些,包括LOCALE

【问题讨论】:

    标签: postgresql encoding character-encoding collation ddl


    【解决方案1】:

    是的,你可以更具体。

    例如:

    CREATE DATABASE "scratch"
      WITH OWNER "postgres"
      ENCODING 'UTF8'
      LC_COLLATE = 'en_US.UTF-8'
      LC_CTYPE = 'en_US.UTF-8';
    

    我还建议阅读以下有关 PostgreSQL 中的语言环境和排序规则的页面:

    【讨论】:

    • 谢谢迈克尔。当我提出相同的想法时,这更像是一种确认;然而,我从来没有在 anywhere 看到过这样的例子,但我总是更喜欢 100% 明确的。在问这个问题之前,我看了看文档;然而,虽然我仍然想出了你给我的语法,但我仍然没有信心我没有遗漏什么。对我来说,这往往暗示文档在提供示例方面可能会更好一些。
    • 这对我有用,但我需要添加以下约束才能使其工作:TEMPLATE = template0
    • pg 的排序规则非常混乱。在 mysql 上,utf8mb4_unicode_ci 是标准的 - 所有语言都在一个排序规则中。这不是 RFC 或 ISO 定义的行为,但它有效! unicode/utf8 的重点是无缝地支持所有语言。指定 utf8,然后强制按照 en_US 这样的单一排序规则进行排序,不仅令人困惑,而且毫无用处。要求是以某种定义的顺序在同一页面上显示英文、中文、日文等!我不能假设每个客户都使用一种主要语言。如何支持多语言?
    • 为了展开,如果我没记错的话,您需要指定一种语言作为与该 utf8 字符集相关的排序规则。但我们想要 utf8 的全部原因是同时支持存储在同一列中的多种语言。我们如何设法将英文和中文都存储在 postgres 的 utf8 列中,同时设法正确地对这些语言进行整理?拥有 utf8 绝对没有意义,同时一次仅限于一种语言。我不禁觉得 postgres 对我们嗤之以鼻,说“这不是语义上的工作方式”,让我们淹死。
    • @Nate,如果您需要在多语言应用程序中对字符串进行语言上正确的排序,那么无论如何您都必须在应用程序中进行排序。如果处理得当,Unicode 字符串将使用Unicode Collation Algorithm 进行整理,而Unicode Collation Algorithm 又使用“整理元素表”。由于1.9.2 中所述的原因,不可能编写一个同时为多种语言提供语言正确排序的 CET。
    猜你喜欢
    • 2016-11-21
    • 2015-03-07
    • 2014-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多