目前我们在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)
这是处理这个问题的正确方法吗?
我对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
使用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)