将 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),"") 来摆脱这个令人讨厌的角色