使用相同的表排序规则在数据库导出和导入中的垃圾数据

我正在使用Adminer转储数据库并将其移至新数据库。两个数据库都在同一MySQL服务器5.5.5-10.1.41-MariaDB-0 + deb9u1上。两个数据库都使用latin1_swedish_ci归类,如Adminer中所示。

这些随机字符串出现在数据库表中,即bs00fgcb代表名称,hgaibbsf@example.org代表电子邮件等。

当然,这些数据在导出数据库之前在应用程序前端正常显示,但是在导入到其他数据库并与其他应用程序一起查看后,在上方显示为垃圾。

在我导入新数据库之前,使用文本编辑器使用UTF-8进行查看时,此垃圾数据会出现在数据库转储中。没有其他数据似乎已损坏。

如果在文本编辑器中查看数据库转储之前先导入它,则会得到相同的垃圾数据。我已尝试多次导出和导入数据库。

这是导出文件头:

-- MySQL dump 10.15  Distrib 10.0.36-MariaDB,for debian-linux-gnu (x86_64)
--
-- Host: localhost    Database: example_sql
-- ------------------------------------------------------
-- Server version   10.0.36-MariaDB-0ubuntu0.16.04.1

/*!40101 SET @OLD_CHARactER_SET_CLIENT=@@CHARactER_SET_CLIENT */;
/*!40101 SET @OLD_CHARactER_SET_RESULTS=@@CHARactER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS,UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS,FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE,SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES,SQL_NOTES=0 */;

这似乎在导入时为每个表集调用一个字符:

DROP TABLE IF EXISTS `example_table`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;

为什么在导出或导入时获得此车库数据?发生在哪里?

在导出之前,我不想尝试转换活动应用程序正在使用的数据库表排序规则。

我在一个导入的表上使用了select convert(binary convert(field_name using latin1) using utf8) from table_name,但是它什么也没做。

chendodo2009 回答:使用相同的表排序规则在数据库导出和导入中的垃圾数据

最后,我不确定是什么问题:导出和/或导入时为管理员;或者,表排序规则为double,即使两个数据库使用相同的排序规则;甚至是服务器上非常老的linux版本和较新的MySQL版本之间的冲突。

但是我在强制UTF的同时通过SSH使用mysqldump导出,然后在导入数据库上将表排序规则更改为utf8_unicode_ci,并且有效。

因此,在强制utf8的同时直接使用mysqldump从MySQL导出:

public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Greetings mGreetings = new Greetings(); private TextView mTVgreetings; private Button BTNmLights,BTNmGarage,mBTNsort; private LightsFragment lightsFragment = new LightsFragment(); private GarageFragment garageFragment = new GarageFragment(); private Fragment currentFragment; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initFunctions(); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.BTNlights: if (!(currentFragment instanceof LightsFragment)) { showLightsFragment(); } break; case R.id.BTNgarage: if (!(currentFragment instanceof GarageFragment)) { showGarageFragment(); } showGarageFragment(); break; case R.id.BTNsort: openSortFragment(); break; } } public void initFunctions() { showLightsFragment(); showGreetings(); } public void showLightsFragment() { getSupportFragmentManager().beginTransaction().replace(R.id.main_fragment_container,this.lightsFragment) .commit(); } public void showGarageFragment() { getSupportFragmentManager().beginTransaction().replace(R.id.main_fragment_container,this.garageFragment) .commit(); } public void showGreetings() { mTVgreetings.setText(mGreetings.getGreetings()); } public void initView() { currentFragment = getSupportFragmentManager().findFragmentById(R.id.main_fragment_container); mTVgreetings = findViewById(R.id.TVgreetings); BTNmLights = findViewById(R.id.BTNlights); BTNmGarage = findViewById(R.id.BTNgarage); mBTNsort = findViewById(R.id.BTNsort); BTNmLights.setOnClickListener(this); BTNmGarage.setOnClickListener(this); mBTNsort.setOnClickListener(this); } public void openSortFragment() { getSupportFragmentManager().beginTransaction() .setCustomAnimations(R.anim.enter_right_to_left,R.anim.exit_left_to_right) .replace(R.id.sort_fragment_container,new SortFragment()) .commit(); } }

或根据需要使用gzip:

for column in foo.columns: df = df[~df[c].str.contains('DDD')]

然后,我将数据库上的表排序规则设置为latin1_swedish_ci,并使用Adminer导入数据库。

本文链接:https://www.f2er.com/3136359.html

大家都在问