I think you're correct that this was probably caused by the CSV not being properly UTF-8 encoded. I suspect that the resulting information object in AtoM is corrupted - either incomplete, or containing unexpected data in columns that are affecting its display.
We have some tips on finding and resolving data corruption on our Troubleshooting page, here:
You could start by running two tasks that resolve common issues - rebuilding the nested set and generating slugs. From AtoM's root installation directory, try:
- php symfony propel:build-nested-set
- php symfony propel:generate-slugs
Now we can clear the application cache and restart PHP-FPM and see if it has helped.
- Clear the cache: php symfony cc
- Restart PHP-FPM:
- Using PHP 7.0: sudo systemctl restart php7.0-fpm
- Using PHP 7.2: sudo systemctl restart php7.2-fpm
If you are able to access the problematic description in the browser, and can see the slug, then we can use that to delete the record using SQL.
To access the MySQL command prompt so we can run SQL queries, we will need to know the MySQL username, password, and database name used during installation. If you can't recall for certain what credentials you used, you can always check in config/config.php - for example, to see this file you could run the following from the root AtoM installation directory, which should be /usr/share/nginx/atom if you have followed our recommended installation instructions:
You should see the database name and credentials listed near the top of the file. You can also check your database username and password in /root/.my.cnf like so:
Once you have the database name, MySQL user name, and password, we can use these to access the MySQL command prompt. Assuming in the following example that your database name is atom and your user and password are root, you could access the prompt like so:
Notice that there is a space between the -u and root, but NOT between the -p and the root password. Alternatively, you can leave no password following the -p, and you will be prompted to enter it by the command prompt before proceeding.
At this point, we should have access to the MySQL command prompt, which should look like this:
Finding the information object ID
If you have the slug of the description, we can use that to return the information object ID with the following query:
- SELECT io.id FROM information_object io JOIN slug s ON s.object_id=io.id WHERE s.slug='slug-goes-here;
Replace slug-goes-here in the example query above with the slug of your problem description.
If you don't have the slug but you do know the title (and importantly, the title is UNIQUE in your AtoM installation), you could find the information object ID using the title with the following query instead:
- SELECT id FROM information_object_i18n WHERE title='Title goes here';
Replace Title goes here in the example query above with the title of your description.
Using the information object ID to delete a record
Once we have the object ID, we can use that to delete the record from the object table - this deletion will then cascade through other related tables in the database, removing the record:
- DELETE FROM information_object WHERE id=12345;
Replace 12345 with the object ID you retrieved using the queries above.
I recommend that you clear the cache, restart PHP-FPM, and re-index your site after making any deletions using SQL! Repopulating the search index:
If that still doesn't work
If the above solutions won't work for you, then there are a few more suggestions in the Data corruption section of the Troubleshooting documentation:
Let us know what you've tried, and what the outcome was for each attempt. We can try to provide some further suggestions if needed!