将 CSV 导入 MySQL Table。只会导入为文本,试图将文本转换为整数
Imported CSV into MySQL Table. Would only import as text, attempting to convert text to integers
1) 我创建了一个包含 2 列的 CSV,FoodID(食物名称)和 CaloriesPerOunce
(我在导入之前删除了两个 headers)。
2) MySQL 只有在我同时设置两种数据类型时才会将 CSV 文件导入我的数据库
至 "text"。如果我没有将它设置为文本,则 CaloriesPerOunce 中的数据
列被截断。
3) 将数据导入 table 后,我就可以更改 FoodID
列数据类型为 VARCHAR(45) 并将其设置为主键。
4) 我无法将 CaloriesPerOunce 列数据类型中的数据更改为
"INT"。列中没有 Null 值。
我通过 Table 视图向 table 添加了一个空行 "Calories" 并将数据类型设置为 INT,试图从 "CaloriesPerOunce" 列复制数据到 "calories" 并再次在第 1 行截断。我真的很困惑为什么我不能更改数据类型。
use nutrition;
ALTER TABLE food MODIFY FoodID VARCHAR(45);
ALTER TABLE food MODIFY CaloriesPerOunce int;
Use Nutrition;
UPDATE food SET calories = CaloriesPerOunce;
5) 我试图通过 Table 视图和代码更改它。两个都
选项给我“错误代码:1265。数据被截断列
第 1 行的“每盎司卡路里”。
FoodID CaloriesPerOunce
Allblue Potatoes 17
Alligator 65
Almond Butter 172
Almond Oil 265
Alphabet Soup 7
American Cheese 41
Anchovy 37
Angel Food Cake 72
Apple Crisp 44
如果您使用记事本打开您的 csv 文件并在第一个数据行的末尾单击,您应该会看到在 caloriesperounce 的最后一位数字和光标之间有一个字符。这似乎一直向下延伸,我不知道这个角色是什么,也不知道你可能做了什么把它放在那里。我能得到的最快解决方法是将 csv 文件导入 excel(如果您添加具有以下公式的列 =LEN(B1) 您应该会看到所有卡路里都比预期大 1)。然后,您可以添加一列 =(MID(B1,1,LEN(B1)-1)) 以去除多余的字符。将第一列和您刚刚创建的列的值复制并粘贴到另一个工作表,并将其另存为逗号分隔文件。用记事本打开这个新文件,检查每个数据行的末尾没有非打印字符。如果可以,请尝试导入到 mysql.
一些进一步的信息 - 如果您添加一列 =CODE(MID(B2,LEN(B2),1)) 并向下复制您将看到最后一列的 ascii 代码为 160,即 space 字符 - 这是不寻常的,因为通常 space 的 ascii 代码为 32(请参阅 http://www.asciitable.com/)您是从网站下载此数据还是使用奇怪的键盘输入?
而且我认为您可以 =SUBSTITUTE(B2,CHAR(160),"") 来摆脱这个令人讨厌的角色
1) 我创建了一个包含 2 列的 CSV,FoodID(食物名称)和 CaloriesPerOunce (我在导入之前删除了两个 headers)。
2) MySQL 只有在我同时设置两种数据类型时才会将 CSV 文件导入我的数据库 至 "text"。如果我没有将它设置为文本,则 CaloriesPerOunce 中的数据 列被截断。
3) 将数据导入 table 后,我就可以更改 FoodID 列数据类型为 VARCHAR(45) 并将其设置为主键。
4) 我无法将 CaloriesPerOunce 列数据类型中的数据更改为 "INT"。列中没有 Null 值。
我通过 Table 视图向 table 添加了一个空行 "Calories" 并将数据类型设置为 INT,试图从 "CaloriesPerOunce" 列复制数据到 "calories" 并再次在第 1 行截断。我真的很困惑为什么我不能更改数据类型。
use nutrition;
ALTER TABLE food MODIFY FoodID VARCHAR(45);
ALTER TABLE food MODIFY CaloriesPerOunce int;
Use Nutrition;
UPDATE food SET calories = CaloriesPerOunce;
5) 我试图通过 Table 视图和代码更改它。两个都 选项给我“错误代码:1265。数据被截断列 第 1 行的“每盎司卡路里”。
FoodID CaloriesPerOunce
Allblue Potatoes 17
Alligator 65
Almond Butter 172
Almond Oil 265
Alphabet Soup 7
American Cheese 41
Anchovy 37
Angel Food Cake 72
Apple Crisp 44
如果您使用记事本打开您的 csv 文件并在第一个数据行的末尾单击,您应该会看到在 caloriesperounce 的最后一位数字和光标之间有一个字符。这似乎一直向下延伸,我不知道这个角色是什么,也不知道你可能做了什么把它放在那里。我能得到的最快解决方法是将 csv 文件导入 excel(如果您添加具有以下公式的列 =LEN(B1) 您应该会看到所有卡路里都比预期大 1)。然后,您可以添加一列 =(MID(B1,1,LEN(B1)-1)) 以去除多余的字符。将第一列和您刚刚创建的列的值复制并粘贴到另一个工作表,并将其另存为逗号分隔文件。用记事本打开这个新文件,检查每个数据行的末尾没有非打印字符。如果可以,请尝试导入到 mysql.
一些进一步的信息 - 如果您添加一列 =CODE(MID(B2,LEN(B2),1)) 并向下复制您将看到最后一列的 ascii 代码为 160,即 space 字符 - 这是不寻常的,因为通常 space 的 ascii 代码为 32(请参阅 http://www.asciitable.com/)您是从网站下载此数据还是使用奇怪的键盘输入?
而且我认为您可以 =SUBSTITUTE(B2,CHAR(160),"") 来摆脱这个令人讨厌的角色