相关疑难解决方法(0)

在my.cnf中将MySQL默认字符集更改为UTF-8?

目前我们在PHP中使用以下命令在我们的应用程序中将字符集设置为UTF-8.

由于这有点开销,我们想将其设置为MySQL中的默认设置.我们可以在/etc/my.cnf或其他地方这样做吗?

SET NAMES 'utf8'
SET CHARACTER SET utf8
Run Code Online (Sandbox Code Playgroud)

我在/etc/my.cnf中找了一个默认的字符集,但是没有关于字符集的内容.

此时,我执行以下操作将MySQL字符集和校对变量设置为UTF-8:

skip-character-set-client-handshake
character_set_client=utf8
character_set_server=utf8
Run Code Online (Sandbox Code Playgroud)

这是处理这个问题的正确方法吗?

mysql character-encoding

328
推荐指数
12
解决办法
45万
查看次数

如何在SQLAlchemy的`create_engine`中使用`charset`和`encoding`(创建pandas数据帧)?

我对SQLAlchemy中的字符集和编码方式非常困惑.我理解(并已阅读)字符集和编码之间的区别,我对编码的历史有一个很好的了解.

我在latin1_swedish_ci中有一个MySQL表(为什么?可能因为这个).我需要创建一个pandas数据帧,在其中我得到正确的字符(而不是奇怪的符号).最初,这是在代码中:

connect_engine = create_engine('mysql://user:password@1.1.1.1/db')
sql_query = "select * from table1"
df = pandas.read_sql(sql_query, connect_engine)
Run Code Online (Sandbox Code Playgroud)

我们开始遇到Š角色的麻烦(对应于u'\u0160'unicode,但我们得到'\ x8a').我希望这可行:

connect_engine = create_engine('mysql://user:password@1.1.1.1/db', encoding='utf8') 
Run Code Online (Sandbox Code Playgroud)

但是,我继续得到'\x8a',我意识到,鉴于编码参数的默认值是有意义的utf8.那么,我试图encoding='latin1'解决这个问题:

connect_engine = create_engine('mysql://user:password@1.1.1.1/db', encoding='latin1')
Run Code Online (Sandbox Code Playgroud)

但是,我仍然得到相同的'\ x8a'.要明确,在这两种情况下(encoding='utf8'encoding='latin1'),我都可以做mystring.decode('latin1')但不能 mystring.decode('utf8').

然后,我重新发现charset了连接字符串中的参数,即'mysql://user:password@1.1.1.1/db?charset=latin1'.在尝试了所有可能的charset和编码组合后,我发现这个工作:

connect_engine = create_engine('mysql://user:password@1.1.1.1/db?charset=utf8')
Run Code Online (Sandbox Code Playgroud)

如果有人能解释我如何正确使用连接字符串中的参数,我将不胜感激charsetencodingcreate_engine

mysql connection-string sqlalchemy pandas

7
推荐指数
4
解决办法
1万
查看次数

如何配置sqlalchemy以正确存储表情符号?

使用sqlalchemy 0.9.7,我试图在启用utf8mb4的情况下将表情符号存储到MySQL 5.5中.然而,由于某种原因,sqlalchemy正在杀死我的表情符号字符,我无法弄清楚为什么.在尝试通过sqlalchemy保存数据之前,我可以在对象中看到表情符号字符.保存后,抛出错误,表情符号呈现为????.

错误如下.请注意,它被输出type(post.message)和调试消息所包围post.message.

--------------------------------------------------------------------------------
DEBUG in __init__ [/mnt/hgfs/crw/dev/hyper/hyper/blueprint/chat/__init__.py:274]:
<type 'unicode'>
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
DEBUG in __init__ [/mnt/hgfs/crw/dev/hyper/hyper/blueprint/chat/__init__.py:275]:

--------------------------------------------------------------------------------
/mnt/hgfs/crw/dev/hyper/env/local/lib/python2.7/site-packages/sqlalchemy/engine/default.py:436: Warning: Incorrect string value: '\xF0\x9F\x98\x83' for column 'message' at row 1
  cursor.execute(statement, parameters)
--------------------------------------------------------------------------------
DEBUG in __init__ [/mnt/hgfs/crw/dev/hyper/hyper/blueprint/chat/__init__.py:277]:
<type 'unicode'>
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
DEBUG in __init__ [/mnt/hgfs/crw/dev/hyper/hyper/blueprint/chat/__init__.py:278]:
????
--------------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

我的代码看起来像:

Base = declarative_base()

post = Table('post', Base.metadata,
        Column("id", Integer, primary_key=True),
        Column("message", UnicodeText),
        Column("created_at", DateTime),
        Column("updated_at", DateTime),
    )

mapper(Post, post)
Run Code Online (Sandbox Code Playgroud)

我需要做任何其他设置才能使其工作吗?

更新:如果我执行以下操作:

Base = declarative_base()

post = Table('post', Base.metadata, …
Run Code Online (Sandbox Code Playgroud)

python mysql sqlalchemy

6
推荐指数
2
解决办法
2898
查看次数