当前位置:Gxlcms > 数据库问题 > SAE用flask+MySQL中文'utf8' codec can't decode byte 0xb7解决方法

SAE用flask+MySQL中文'utf8' codec can't decode byte 0xb7解决方法

时间:2021-07-01 10:21:17 帮助过:54人阅读

CREATE DATABASE app_jcguo;

返回:

  1. <code class=" hljs sql"><span class="hljs-operator"><span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">DATABASE</span> <span class="hljs-string">`app_jcguo`</span> /*!<span class="hljs-number">40100</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-keyword">CHARACTER</span> <span class="hljs-keyword">SET</span> utf8 */</span></code>

以及

  1. <code class=" hljs sql"><span class="hljs-operator"><span class="hljs-keyword">SHOW</span> <span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">TABLE</span> Hotels</span></code>

我添加了default charset:

  1. <code class=" hljs sql"><span class="hljs-operator"><span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">TABLE</span> <span class="hljs-string">`Hotels`</span> (
  2. <span class="hljs-string">`id`</span> <span class="hljs-keyword">int</span>(<span class="hljs-number">11</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-keyword">NULL</span>,
  3. <span class="hljs-string">`name`</span> <span class="hljs-keyword">varchar</span>(<span class="hljs-number">40</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-keyword">NULL</span>,
  4. <span class="hljs-string">`city`</span> <span class="hljs-keyword">varchar</span>(<span class="hljs-number">10</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-keyword">NULL</span>,
  5. <span class="hljs-string">`address`</span> text,
  6. <span class="hljs-string">`price`</span> <span class="hljs-keyword">int</span>(<span class="hljs-number">11</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-keyword">NULL</span>,
  7. <span class="hljs-string">`total`</span> <span class="hljs-keyword">int</span>(<span class="hljs-number">11</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-keyword">NULL</span>,
  8. <span class="hljs-string">`avail`</span> <span class="hljs-keyword">int</span>(<span class="hljs-number">11</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-keyword">NULL</span>,
  9. <span class="hljs-string">`pic_b`</span> <span class="hljs-keyword">varchar</span>(<span class="hljs-number">40</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-keyword">NULL</span>,
  10. <span class="hljs-string">`pic_s`</span> <span class="hljs-keyword">varchar</span>(<span class="hljs-number">40</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-keyword">NULL</span>,
  11. <span class="hljs-keyword">PRIMARY</span> <span class="hljs-keyword">KEY</span> (<span class="hljs-string">`id`</span>)
  12. ) ENGINE=MyISAM <span class="hljs-keyword">DEFAULT</span> CHARSET=utf8</span></code>

属性也都是varchar类型并且设置为utf8_general_ci:
技术分享

最后Google寻找解决方案,原来是MySQLdb.connect()还要设置一遍charset来指定cursor取数据库数据的格式:

  1. <code class=" hljs python"><span class="hljs-decorator">@app.before_request</span>
  2. <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">before_request</span><span class="hljs-params">()</span>:</span>
  3. g.db = MySQLdb.connect(
  4. MYSQL_HOST,
  5. MYSQL_USER,
  6. MYSQL_PASS,
  7. MYSQL_DB,
  8. port=int(MYSQL_PORT),
  9. charset = <span class="hljs-string">‘utf8‘</span>
  10. )</code>

第一次用MySQL存中文,遇到此坑,遂记录在Blog上。SQLite所有操作默认都是UTF-8,TAT,老用python+SQLite就忽略了这个问题。

对了,文件头中别忘了添加编码注释:

  1. <code class=" hljs vala"><span class="hljs-preprocessor"># -*- coding:utf8 -*-</span>
  2. <span class="hljs-preprocessor">#encoding = utf-8</span></code>

SAE用flask+MySQL中文'utf8' codec can't decode byte 0xb7解决方法

标签:sae   flask   mysql   mysql中文   utf8   

人气教程排行